package com.sunl.mall.ali.mq.api.producer;

import com.aliyun.openservices.ons.api.Admin;
import com.aliyun.openservices.ons.api.SendCallback;
import com.sunl.mall.ali.mq.model.RocketMqMessageWrapper;
import com.sunl.mall.ali.mq.model.RocketMqSendResult;
import com.sunl.mall.ali.mq.serializer.RocketMqSerializer;

public interface RocketMqProducer extends Admin {
    /**
     * 发送消息
     *
     * @param body       消息体
     * @param serializer 序列化方式
     * @param <T>        消息体类型
     * @return 返回发送狀態
     */
    <T> boolean send(RocketMqMessageWrapper<T> body, RocketMqSerializer<T> serializer);

    /**
     * 发送消息
     *
     * @param body       消息体
     * @param serializer 序列化方式
     * @param <T>        消息体类型
     * @return 返回发送结果
     */
    <T> RocketMqSendResult sendBackResult(RocketMqMessageWrapper<T> body, RocketMqSerializer<T> serializer);

    /**
     * 单向发送（不等待响应结果）
     *
     * @param body       消息体
     * @param serializer 序列化方式
     * @param <T>        消息体类型
     * @return 此处<code>boolean</code>不表示任何狀態
     */
    <T> boolean sendOneway(RocketMqMessageWrapper<T> body, RocketMqSerializer<T> serializer);

    /**
     * 异步发送mq
     *
     * @param body       消息体
     * @param serializer 序列化方式
     * @param callback   回调方法
     * @param <T>        消息体类型
     * @return 此处<code>boolean</code>不表示任何狀態
     */
    <T> boolean sendAsync(RocketMqMessageWrapper<T> body, RocketMqSerializer<T> serializer, SendCallback callback);
}
